# coding=utf-8
from collections import Iterable

d = {'name': '藏三', 'age': 22}
for key in d:
    print(key)

# 默认情况下，dict迭代的是key。如果要迭代value，可以用for value in d.values()，如果要同时迭代key和value，可以用for k, v in d.items()。
for v in d.values():
    print(v)

for k, v in d.items():
    print(k, ":", v)

# 由于字符串也是可迭代对象，因此，也可以作用于for循环
str1 = 'ABCDEFG'
for s in str1:
    print(s)

# 判断一个对象是可迭代对象时用collections模块的Iterable类型判断
print(isinstance('abc', Iterable))
print(isinstance([1, 2, 3], Iterable))
print(isinstance(123, Iterable))

# 对list实现类似Java那样的下标循环怎么办？Python内置的enumerate函数可以把一个list变成索引-元素对，这样就可以在for循环中同时迭代索引和元素本身：
array = ['a', 'b', 'c', 'd', 'e']
for i, val in enumerate(array):
    print('下标:', i, '对应值:', val)

array2 = [(1, 'a'), (2, 'b'), (3, 'c')]
for x, y in array2:
    print(x, ':', y)


# 小练习：使用迭代查找一个list中最小和最大值，并返回一个tuple
def find_min_and_max(arr):
    max_num = arr[0]
    min_num = arr[0]
    for a in arr:
        if a > max_num:
            max_num = a
        if a < min_num:
            min_num = a
    tu = (max_num, min_num)
    return tu


tup = find_min_and_max([121, 22, 13, 423, 15, 62, 7, 31, 123])
print(tup)
